#ifndef EPOLLER_H
#define EPOLLER_H

#include <cstdint>
#include <sys/epoll.h>
#include <vector>

class Epoller{
public:
    explicit Epoller(int maxEvent = 1024);
    ~Epoller();

    bool AddFd(int Fd, uint32_t events);
    
    bool ModFd(int fd, uint32_t events);

    bool DelFd(int fd);

    // 表示“无限等待”，和epoll_wait的timeout参数有关
    int Wait(int timeout = -1); 

    // 获取索引为i的epoll_event的文件描述符
    int GetEventFd(size_t i) const;

    // 获取索引为i的epoll_event所关注的事件
    uint32_t GetEvents(size_t i) const;
private:
    int epollfd_;
    
    std::vector<epoll_event> events_; // 存储epoll所关注的文件描述符
};

#endif 